package com.bobo.cretrofit;

import java.util.List;

import io.reactivex.rxjava3.core.Observable;
import okhttp3.OkHttpClient;
import retrofit2.Converter;

/**
 * 全局API网络请求处理类
 * Created by cocolove2 on 2018/8/6.
 */
public interface IApiHandler {


    /**
     * 配置retrofit转换器
     *
     * @return
     */
    List<Converter.Factory> buildConverterFactory();

    /**
     * 构建OkhttpClient
     */
    OkHttpClient buildOkHttpClient();


    /**
     * 定义请求码是多少时，请求是成功的一般是0
     */
    boolean isResponseSuccess(int code);


    /**
     * 定义错误码对应的异常，进行网络请求重试时会用到
     *
     * @param code 错误码
     */
    Exception retryWhenException(int code);

    /**
     * 重试条件处理
     *
     * @param throwable 异常
     * @param tryCount  重试的次数
     */
    Observable<?> retryWhenObservable(String tag, int tryCount, Throwable throwable);

    /**
     * 根据错误码处理业务自定义的异常
     *
     * @param code 错误码
     * @param msg  错误提示
     */
    void handleCustomizeException(int code, String msg);

    /**
     * 处理网络请求相关的全局异常
     *
     * @param e        异常
     * @param listener 回调监听
     */
    void handleErrorException(Throwable e, OnHttpListener listener);
}
